package com.gxa.modules.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.gxa.common.base.RespResult;
import com.gxa.modules.dto.AdvancedContractDTO;
import com.gxa.modules.dto.ContractDTO;
import com.gxa.modules.dto.RenewalRecordDTO;
import com.gxa.modules.entity.CrmContract;
import com.gxa.modules.entity.CrmContractType;

import java.math.BigDecimal;

public interface ContractService extends IService<CrmContract> {

    /**
     * 分页查询所有合同列表
     * @param currentPage
     * @param pageSize
     * @return
     */
    RespResult queryAllContractsByPage(int currentPage, int pageSize);

    /**
     * 查询今日新增的合同列表
     * @param currentPage
     * @param pageSize
     * @return
     */
    RespResult queryContractsByTodayByPage(int currentPage, int pageSize);

    /**
     * 查询本周新增的合同列表
     * @param currentPage
     * @param pageSize
     * @return
     */
    RespResult queryContractsByWeekByPage(int currentPage, int pageSize);

    /**
     * 查询本月新增的合同列表
     * @param currentPage
     * @param pageSize
     * @return
     */
    RespResult queryContractsByMonthByPage(int currentPage, int pageSize);

    /**
     * 查询今日到期的合同列表
     * @param currentPage
     * @param pageSize
     * @return
     */
    RespResult queryContractsByDueTodayByPage(int currentPage, int pageSize);

    /**
     * 查询本周到期的合同列表
     * @param currentPage
     * @param pageSize
     * @return
     */
    RespResult queryContractsByDueWeekByPage(int currentPage,int pageSize);

    /**
     * 查询本月到期的合同列表
     * @param currentPage
     * @param pageSize
     * @return
     */
    RespResult queryContractsByDueMonthByPage(int currentPage,int pageSize);

    /**
     * 新增合同
     * @param contractDTO
     * @return
     */
    RespResult insertContract(ContractDTO contractDTO);

    /**
     * 新增合同类型
     * @param crmContractType
     * @return
     */
    RespResult insertContractType(CrmContractType crmContractType);

    /**
     * 查询合同类型
     * @return
     */
    RespResult selectContractTypes();

    /**
     * 修改合同类型
     * @param crmContractType
     * @return
     */
    RespResult reviseContractType(CrmContractType crmContractType);

    /**
     * 删除合同类型
     * @param id
     * @return
     */
    RespResult deleteContractType(int id);

    /**
     * 新增续费记录
     * @param renewalRecordDTO
     * @return
     */
    RespResult addRenewal(RenewalRecordDTO renewalRecordDTO);

    /**
     * 修改合同续费记录
     * @param renewalRecordDTO
     * @return
     */
    RespResult updateRenewal(RenewalRecordDTO renewalRecordDTO);

    /**
     * 删除合同续费记录
     * @param id
     * @return
     */
    RespResult deleteRenewal(int id);

    /**
     * 修改续费状态
     * @param id
     * @param status
     * @return
     */
    RespResult updateRenewalStatus(int id,String status);

    /**
     * 查询合同对应的续费记录
     * @param contractId
     * @param currentPage
     * @param pageSize
     * @return
     */
    RespResult queryRenewals(String contractId,int currentPage,int pageSize);

    /**
     * 到款
     * @param contractId 合同编号
     * @param payment
     * @param remark
     * @return
     */
    RespResult paymentReceived(String contractId, BigDecimal payment, String remark);

    /**
     * 修改合同
     * @param contractDTO
     * @return
     */
    RespResult updateContract(ContractDTO contractDTO);

    /**
     * 删除合同
     * @param contractId
     * @return
     */
    RespResult deleteContract(String contractId);

    /**
     * 修改合同状态
     * @param contractId
     * @param status
     * @param auditorId
     * @return
     */
    RespResult updateContractStatus(String contractId,String status,int auditorId);

    /**
     * 按条件（客户名称、合同编号）搜索合同列表
     * @param condition
     * @return
     */
    RespResult queryContractByCondition(String condition);

    /**
     * 高级搜索合同列表
     * @param advancedContractDTO
     * @param currentPage
     * @param pageSize
     * @return
     */
    RespResult advancedQueryContracts(AdvancedContractDTO advancedContractDTO, int currentPage, int pageSize);

}
